//匹配日期控件
var datepickerSelector = ".datepicker";
//匹配验证控件
var validateSelector = ".validate";
//关闭该元素及其子元素的ajax提交方式
var offAjaxClass = "offajax";
//开启该元素及其子元素的ajax提交方式
var onAjaxClass = "onajax";

/** 控件 */
var $hs_menu;
/** url变换开关 */
var urlChangeSwitch = true;
/** 刷新的ajax页面 */
var ajaxRefSelector = "#childpage";
/* 访问状态 */
$(function(){
	//调用菜单插件
	$hs_menu = $("#hs_menu").hsmenu({
		itemClick: function(url){
			//请求地址
			url = url.replace(window.location.pathname, window.location.pathname + "#") + "?_=" + Math.random();
			window.location.href = url;
		}
	});
	
	if (urlChangeSwitch) {
		//加载完成后根据路径向服务端请求数据
		var url = window.location.pathname + window.location.hash.replace("#", "");
		if (url != window.location.pathname) {
			var reg = new RegExp("\\?_=.*", "g");
			$hs_menu.selectItem(url.replace(reg, ""));
			ajaxRequest($(ajaxRefSelector), url, true);
		}
	
		//路径变化后请求数据
		$(window).on("hashchange", function(){			
			var url = this.location.pathname + this.location.hash.replace("#", "");
			$hs_menu.selectItem(url);
			ajaxRequest($(ajaxRefSelector), url, true);
		});
	}
	
	//设置验证出错样式
	$.validator.setDefaults({errorClass: "hs-validator-error"});
//		$.datepicker.setDefaults( $.datepicker.regional[ "zh-CN" ]);
});

/**
 * 请求
 * @param fill	填充的html容器
 * @param url	请求地址
 * @param isFlyinto	动画是否以飞入方式
 * @param data		键值对数据
 * @param type		请求类型 默认get，post
 */
function ajaxRequest(fill, url, isFlyinto, data, type) {
	//显示loading动画
	$("#hs-state").children().remove();
	$("#hs-state").hsloading();
	$.ajax({
		url: url,
		data: data,
		type: type,
		//cache: false,
		ifModified: true,
		success: function(responseText) {
			fillHtmlContainer(fill, responseText, isFlyinto);   
		},
		statusCode: {
			200: function(responseText, status, jqXHR) {
				//取消loadding动画
				$("#hs-state").children().remove();
			},
			403: function() {
				$("#hs-state").children().remove();
			 	alert("您没有访问权限！");
			},
			404: function() {
				$("#hs-state").children().remove();
			 	alert("找不到页面！");
			},
			500: function() {
				$("#hs-state").children().remove();
				alert("服务器错误！");
			}
		}
	});
}

/**
 * 填充容器
 * @param $container	jquery对象
 * @param htmlStr	html字符串
 * @param isFlyinto	动画方式是否飞入
 */
function fillHtmlContainer($container, htmlStr, isFlyinto) {
	
	if (isFlyinto != undefined && isFlyinto == true) {
		$container.css("opacity", 0);
		$container.css("left", "30px");
		$container.css("right", "-30px");
		$container.html(htmlStr);
		$container.animate({"opacity": "1", "left": "0px", "right": "0px"}, "fast");
	} else {
		$container.hide();		
		$container.html(htmlStr);
		$container.fadeIn("fast");
	}
	
	var $hsToolbar = $("#hs-toolbar").empty();
	//配置为工具栏
	$(".hs-toolbar-button").each(function(){
		var $this = $(this).hide();
		var $li = $("<li class='hs-toolbar-button' />" );
		$("<img alt='' src='" + hsres + "/script/site/admin/img/invis.gif' />").appendTo($li);
		var text = "";
		if ($this.is("a")) {
			text = $this.text();
		} else if ($this.is("input")) {
			text = $this.val();
		}
		$("<label />").text(text).appendTo($li);
		
		$li.hover(function(){
			$(this).addClass("hover");			
		}, function(){
			$(this).removeClass("hover");			
		});
		$li.click(function(){
			$this.click();
		});
		
		$li.attr("class", $this.attr("class"));
				
		$hsToolbar.append($li);
	});
	
	$("#hs-me").hover(function(){
		$(this).addClass("hover");
	},function(){
		$(this).removeClass("hover");
	});
	
	
	//为删除增加提示框
	$(".delete").each(function(){
		$(this).on("click", function(e) {
			if(!confirm("是否要删除该项?")) {
				//停止继续执行其他事件
				e.stopImmediatePropagation();
				e.preventDefault();
			}
		}); 
	});
	//设置table外观
	$(".hs-table > tbody > tr:gt(0)").hover(
		function() {
			$(this).addClass("hs-state-hover");
		},
		function() {
			$(this).removeClass("hs-state-hover");
		}
	);
	//设置文本框外观
	$(":text").addClass("hs-text");
	//设置文本，下拉，文本域外观
	$(":text, select, textarea").hover(
		function() {
			$(this).addClass("hs-state-hover");
		},
		function() {
			$(this).removeClass("hs-state-hover");
		}
	);
	//设置按钮外观
	$("input[type=button], input[type=submit], input[type=reset], button").button().addClass("hs-button");
	//绑定日期控件
	$(datepickerSelector).datepicker();
	//绑定验证表单
	$(validateSelector).validate();
	//绑定返回按钮
	$(".hs-fn-back").click(function() {
		//返回上级地址
		//window.history.back();
		alert($(this).html());
		//alert(window.location.pathname + window.location.hash);
	});
	
	//将表单和超链接修改为AJAX提交
	change2Ajax($container, true);
}

/*
 * 将表单和超链接修改为AJAX提交
 */
function change2Ajax(jqObj, useAjax) {
	//将class属性为offajax的锚点和提交按钮，排除在ajax传输之外
	jqObj.children().each(function(){
		var child = $(this);
		if (child.is("a") && useAjax) {
			child.on("click", function(e){
				var url = $(this).attr("href");
				ajaxRequest($(ajaxRefSelector), url);
				//停止浏览器默认行为（超链接）
				e.preventDefault();
			});
		} else if (child.is("input[type=submit]") && useAjax) {
			var hsform = $(this).parents("form");
			hsform.on("submit", function(e) {
				//验证通过后才将数据提交到服务端
				if(hsform.valid()) {
					var url = hsform.attr("action");
					ajaxRequest($(ajaxRefSelector), url, false, hsform.serialize(), hsform.attr("method"));
				}
				//停止浏览器默认行为（提交）
				e.preventDefault();
			});
		} else {
			//如果没有改变状态的ajaxclass，则继续保持父元素的状态
			var childUseAjax = useAjax;
			if (child.hasClass(offAjaxClass)) {
				childUseAjax = false;
			} else if (child.hasClass(onAjaxClass)) {
				childUseAjax = true;
			}
			//递归
			change2Ajax(child, childUseAjax);
		}
	});
}